// config/config.go
package config

import "sync"

// 全局配置实例（对外通过 Get() 获取，内部通过 loader 初始化）
var (
	globalConfig *Config
	initOnce     sync.Once // 确保全局初始化只执行一次
)

// Init 初始化配置（对外暴露的初始化入口）
// 参数：可选的加载器选项（如配置目录、环境等）
func Init(opts ...LoaderOption) error {
	var err error
	initOnce.Do(func() {
		// 调用 loader.go 中的内部加载函数
		globalConfig, err = loadConfig(opts...)
	})
	return err
}

// Get 获取全局配置实例（必须先调用 Init() 初始化）
func Get() *Config {
	if globalConfig == nil {
		panic("配置未初始化，请先调用 config.Init()")
	}
	return globalConfig
}

// Reload 重新加载配置（可选功能，用于动态更新配置）
func Reload(opts ...LoaderOption) error {
	// 重置 initOnce，允许再次初始化
	initOnce = sync.Once{}
	globalConfig = nil
	return Init(opts...)
}
